/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beta.SolveForX;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.javaocr.gui.GUIController;
import net.sourceforge.javaocr.gui.meanSquareOCR.TrainingImageSpec;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.CharacterRange;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.OCRScanner;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.TrainingImage;
/*Clase que invoca el OCR e interpreta la imagen de entrada*/

public class OCR {

    private BufferedImage ecuacion;
    private static String imagePath = "D:\\Proyecto 2\\Beta\\src\\beta\\Imagenes\\trainingImages\\";
    private List<TrainingImageSpec> images = new ArrayList<TrainingImageSpec>(0);
    private TrainingImageSpec tis = null;
    private OCRScanner ocrs = new OCRScanner();
    private GUIController gc = new GUIController();
    private Pattern p;
    private Matcher m;

    //Carga la imagen e invoca el metodo de aprendizaje de caracteres.
    public OCR(BufferedImage entrada) {
        this.ecuacion = entrada;
        aprenderCaracteres();
    }

    //Se expecifica la ubicacion de la imagen donde se encuentran los caracteres a aprender
    //Y lo agregas a una lista.
    private void aprenderCaracteres() {
        tis = new TrainingImageSpec();
        tis.setFileLocation(imagePath + "hpljPica.jpg");
        tis.setCharRange(new CharacterRange(' ', '~'));
        images.add(tis);
    }

    /*En esta seccion se carga la lista y se va comparando cada letra del resultado
    de la parte se segmentacion que corresponde al algoritmo del OCR.*/
    public String leerImagen() {
        String texto = null;
        String salida = "";
        try {
            HashMap<Character, ArrayList<TrainingImage>> trainingImages = gc.getTrainingImageHashMap((ArrayList) images);
            ocrs.addTrainingImages(trainingImages);
            texto = ocrs.scan(ecuacion, 0, 0, 0, 0, null);
            p = Pattern.compile("([a-zA-Z]\\d)");
            String arr[] = texto.split(" ");
            for (String string : arr) {
                m = p.matcher(string);
                if (m.find()) {
                    String arrTemp[] = m.group(0).split("");
                    salida += arrTemp[1] + "^" + arrTemp[2] + " ";
                } else {
                    salida += string + " ";
                }
            }

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println(salida);
        return salida;
    }
}
